<?php

declare (strict_types=1);

namespace app\api\controller\boss;

use app\api\controller\Controller;
use app\api\service\boss\MIndexV2;
use think\response\Json;

/**
 * 默认控制器
 * Class Index
 * @package app\api\controller\boss
 */
class Index extends Controller
{
    public function index(): Json
    {
        $params = $this->postData();
        if (empty($params)) {
            return $this->renderError('参数为空');
        }

        $selectParams = [
            'payType'     => isset($params['payType']) ? $params['payType'] : 0, // 收款方式类型 1现金营收 2三券营收 3赠品营收 4充值营收  0合计营收
            'incomeType'  => isset($params['incomeType']) ? $params['incomeType'] : 1, // 营收类型 1标价应收 2业绩营收 3实际营收
            'bangdouStoreIds' => isset($params['bangdouStoreIds']) ? $params['bangdouStoreIds'] : [],// 6666外卖 7777百货,
            //'organId'     => isset($params['organId']) ? $params['organId'] : [], // 6666外卖 7777百货,
            'erpStoresId' => isset($params['erpStoresId']) ? $params['erpStoresId'] : [],//外卖用到
            'online'      => isset($params['online']) ? $params['online'] : 1, // 0全部 1线上 2线下
            'startTime'   => isset($params['startTime']) ? $params['startTime'] : strtotime(date('y-m-d 00:00:00')),
            'endTime'     => isset($params['endTime']) ? $params['endTime'] : strtotime(date('y-m-d 23:59:59')),
            'dateType'    => isset($params['dateType']) ? $params['dateType'] : 0,//时间类型
        ];
        $MIndexV2     = new MIndexV2();
        // 根据dateType处理时间
        $selectParams = $MIndexV2::getUnixTimeByDataType($selectParams);

        if ($selectParams['dateType'] == 11 && !isset($params['startTime']) && !isset($params['endTime'])) {
            return $this->renderError('未选择时间');
        }

        $data = $MIndexV2->index($selectParams);
        if ($data) {
            $result['state'] = true;
            $result['data']  = $data;
            return json($result);
        } else {
            $result['state']   = false;
            $result['message'] = $MIndexV2->getError();
            $result['data']    = [];
            return json($result);
        }
    }

    // 经营数据趋势图
    public function curve(): Json
    {
        $params = $this->postData();
        if (empty($params)) {
            return $this->renderError('参数为空');
        }
        $selectParams = [
            'curveType'   => isset($params['curveType']) ? $params['curveType'] : 1, // 趋势图类型 1营收额 2毛利额 3毛利率 4客单数
            'payType'     => isset($params['payType']) ? $params['payType'] : 0, // 收款方式类型 1现金营收 2三券营收 3赠品营收 4充值营收 0合计营收
            'incomeType'  => isset($params['incomeType']) ? $params['incomeType'] : 1, // 营收类型 1标价应收 2业绩营收 3实际营收
            'bangdouStoreIds' => isset($params['bangdouStoreIds']) ? $params['bangdouStoreIds'] : [],// 6666外卖 7777百货,
            //'organId'     => isset($params['organId']) ? $params['organId'] : [], // 6666外卖 7777百货,
            'erpStoresId' => isset($params['erpStoresId']) ? $params['erpStoresId'] : [],//外卖用到
            'online'      => isset($params['online']) ? $params['online'] : 1, // 0全部 1线上 2线下
            'startTime'   => isset($params['startTime']) ? $params['startTime'] : strtotime(date('y-m-d 00:00:00')),
            'endTime'     => isset($params['endTime']) ? $params['endTime'] : strtotime(date('y-m-d 23:59:59')),
            'dateType'    => isset($params['dateType']) ? $params['dateType'] : 0,
        ];
        // 根据dateType处理时间
        $MIndexV2 = new MIndexV2();
        // 根据dateType处理时间
        $selectParams = $MIndexV2::getUnixTimeByDataType($selectParams);

        if ($selectParams['dateType'] == 11 && !isset($params['startTime']) && !isset($params['endTime'])) {
            return $this->renderError('未选择时间');
        }

        $data = $MIndexV2->curve($selectParams);
        if ($data) {
            $result['state'] = true;
            $result['data']  = $data;
            return json($result);
        } else {
            $result['state']   = false;
            $result['message'] = $MIndexV2->getError();
            $result['data']    = [];
            return json($result);
        }
    }

    // 经营数据分析
    public function marketing(): Json
    {
        $params = $this->postData();
        if (empty($params)) {
            return $this->renderError('参数为空');
        }

        $selectParams = [
            'payType'     => isset($params['payType']) ? $params['payType'] : 0, // 收款方式类型 1现金营收 2三券营收 3赠品营收 0合计营收
            'incomeType'  => isset($params['incomeType']) ? $params['incomeType'] : 1, // 营收类型 1标价应收 2业绩营收 3实际营收
            'bangdouStoreIds' => isset($params['bangdouStoreIds']) ? $params['bangdouStoreIds'] : [],// 6666外卖 7777百货,
            //'organId'     => isset($params['organId']) ? $params['organId'] : [], // 6666外卖 7777百货,
            'erpStoresId' => isset($params['erpStoresId']) ? $params['erpStoresId'] : [],//外卖用到
            'online'      => isset($params['online']) ? $params['online'] : 1, // 0全部 1线上 2线下
            'startTime'   => isset($params['startTime']) ? $params['startTime'] : strtotime(date('y-m-d 00:00:00')),
            'endTime'     => isset($params['endTime']) ? $params['endTime'] : strtotime(date('y-m-d 23:59:59')),
            'dateType'    => isset($params['dateType']) ? $params['dateType'] : 0,
        ];
        // 根据dateType处理时间
        $MIndexV2 = new MIndexV2();
        // 根据dateType处理时间
        $selectParams = $MIndexV2::getUnixTimeByDataType($selectParams);

        if ($selectParams['dateType'] == 11 && !isset($params['startTime']) && !isset($params['endTime'])) {
            return $this->renderError('未选择时间');
        }

        $data = $MIndexV2->marketing($selectParams);
        if ($data) {
            $result['state'] = true;
            $result['data']  = $data;
            return json($result);
        } else {
            $result['state']   = false;
            $result['message'] = $MIndexV2->getError();
            $result['data']    = [];
            return json($result);
        }
    }

    // 营收数据分析
    public function income(): Json
    {
        $params = $this->postData();
        if (empty($params)) {
            return $this->renderError('参数为空');
        }

        $selectParams = [
            'payType'     => isset($params['payType']) ? $params['payType'] : 0, // 收款方式类型 1现金营收 2三券营收 3赠品营收 0合计营收
            'incomeType'  => isset($params['incomeType']) ? $params['incomeType'] : 1, // 营收类型 1标价应收 2业绩营收 3实际营收
            'bangdouStoreIds' => isset($params['bangdouStoreIds']) ? $params['bangdouStoreIds'] : [],// 6666外卖 7777百货,
            //'organId'     => isset($params['organId']) ? $params['organId'] : [], // 6666外卖 7777百货,
            'erpStoresId' => isset($params['erpStoresId']) ? $params['erpStoresId'] : [],//外卖用到
            'online'      => isset($params['online']) ? $params['online'] : 1, // 0全部 1线上 2线下
            'startTime'   => isset($params['startTime']) ? $params['startTime'] : strtotime(date('y-m-d 00:00:00')),
            'endTime'     => isset($params['endTime']) ? $params['endTime'] : strtotime(date('y-m-d 23:59:59')),
            'dateType'    => isset($params['dateType']) ? $params['dateType'] : 0,
        ];
        // 根据dateType处理时间
        $MIndexV2 = new MIndexV2();
        // 根据dateType处理时间
        $selectParams = $MIndexV2::getUnixTimeByDataType($selectParams);

        if ($selectParams['dateType'] == 11 && !isset($params['startTime']) && !isset($params['endTime'])) {
            return $this->renderError('未选择时间');
        }

        $data = $MIndexV2->income($selectParams);
        if ($data) {
            $result['state'] = true;
            $result['data']  = $data;
            return json($result);
        } else {
            $result['state']   = false;
            $result['message'] = $MIndexV2->getError();
            $result['data']    = [];
            return json($result);
        }
    }

    // 促销数据分析
    public function promotion(): Json
    {
        $params = $this->postData();
        if (empty($params)) {
            return $this->renderError('参数为空');
        }

        $selectParams = [
            'payType'     => isset($params['payType']) ? $params['payType'] : 0, // 收款方式类型 1现金营收 2三券营收 3赠品营收 0合计营收
            'incomeType'  => isset($params['incomeType']) ? $params['incomeType'] : 1, // 营收类型 1标价应收 2业绩营收 3实际营收
            'bangdouStoreIds' => isset($params['bangdouStoreIds']) ? $params['bangdouStoreIds'] : [],// 6666外卖 7777百货,
            //'organId'     => isset($params['organId']) ? $params['organId'] : [], // 6666外卖 7777百货,
            'erpStoresId' => isset($params['erpStoresId']) ? $params['erpStoresId'] : [],//外卖用到
            'online'      => isset($params['online']) ? $params['online'] : 1, // 0全部 1线上 2线下
            'startTime'   => isset($params['startTime']) ? $params['startTime'] : strtotime(date('y-m-d 00:00:00')),
            'endTime'     => isset($params['endTime']) ? $params['endTime'] : strtotime(date('y-m-d 23:59:59')),
            'dateType'    => isset($params['dateType']) ? $params['dateType'] : 0,
        ];
        // 根据dateType处理时间
        $MIndexV2 = new MIndexV2();
        // 根据dateType处理时间
        $selectParams = $MIndexV2::getUnixTimeByDataType($selectParams);

        if ($selectParams['dateType'] == 11 && !isset($params['startTime']) && !isset($params['endTime'])) {
            return $this->renderError('未选择时间');
        }

        $data = $MIndexV2->promotion($selectParams);
        if ($data) {
            $result['state'] = true;
            $result['data']  = $data;
            return json($result);
        } else {
            $result['state']   = false;
            $result['message'] = $MIndexV2->getError();
            $result['data']    = [];
            return json($result);
        }
    }

    // 折损数据分析
    public function depreciation(): Json
    {
        $params = $this->postData();
        if (empty($params)) {
            return $this->renderError('参数为空');
        }

        $selectParams = [
            'payType'     => isset($params['payType']) ? $params['payType'] : 0, // 收款方式类型 1现金营收 2三券营收 3赠品营收 0合计营收
            'incomeType'  => isset($params['incomeType']) ? $params['incomeType'] : 1, // 营收类型 1标价应收 2业绩营收 3实际营收
            'bangdouStoreIds' => isset($params['bangdouStoreIds']) ? $params['bangdouStoreIds'] : [],// 6666外卖 7777百货,
            //'organId'     => isset($params['organId']) ? $params['organId'] : [], // 6666外卖 7777百货,
            'erpStoresId' => isset($params['erpStoresId']) ? $params['erpStoresId'] : [],//外卖用到
            'online'      => isset($params['online']) ? $params['online'] : 0, // 0全部 1线上 2线下
            'startTime'   => isset($params['startTime']) ? $params['startTime'] : strtotime(date('y-m-d 00:00:00')),
            'endTime'     => isset($params['endTime']) ? $params['endTime'] : strtotime(date('y-m-d 23:59:59')),
            'dateType'    => isset($params['dateType']) ? $params['dateType'] : 0,
        ];
        // 根据dateType处理时间
        $MIndexV2 = new MIndexV2();
        // 根据dateType处理时间
        $selectParams = $MIndexV2::getUnixTimeByDataType($selectParams);

        if ($selectParams['dateType'] == 11 && !isset($params['startTime']) && !isset($params['endTime'])) {
            return $this->renderError('未选择时间');
        }

        $data = $MIndexV2->depreciation($selectParams);
        if ($data) {
            $result['state'] = true;
            $result['data']  = $data;
            return json($result);
        } else {
            $result['state']   = false;
            $result['message'] = $MIndexV2->getError();
            $result['data']    = [];
            return json($result);
        }
    }

    // 排行榜
    public function rank(): Json
    {
        $params = $this->postData();
        if (empty($params)) {
            return $this->renderError('参数为空');
        }

        $selectParams = [
            'payType'     => isset($params['payType']) ? $params['payType'] : 0, // 收款方式类型 1现金营收 2三券营收 3赠品营收 0合计营收
            'incomeType'  => isset($params['incomeType']) ? $params['incomeType'] : 1, // 营收类型 1标价应收 2业绩营收 3实际营收
            'bangdouStoreIds' => isset($params['bangdouStoreIds']) ? $params['bangdouStoreIds'] : [],// 6666外卖 7777百货,
            //'organId'     => isset($params['organId']) ? $params['organId'] : [], // 6666外卖 7777百货,
            'erpStoresId' => isset($params['erpStoresId']) ? $params['erpStoresId'] : [],//外卖用到
            'online'      => isset($params['online']) ? $params['online'] : 1, // 0全部 1线上 2线下
            'startTime'   => isset($params['startTime']) ? $params['startTime'] : strtotime(date('y-m-d 00:00:00')),
            'endTime'     => isset($params['endTime']) ? $params['endTime'] : strtotime(date('y-m-d 23:59:59')),
            'dateType'    => isset($params['dateType']) ? $params['dateType'] : 0,
            'topContent'  => isset($params['topContent']) ? $params['topContent'] : 1, // 排名维度 1单品 4小类 2大类
            'rankType'    => isset($params['rankType']) ? $params['rankType'] : 1, // 排名方式 1销量  2金额
            'page'        => isset($params['page']) ? $params['page'] : 1,
            'pageSize'    => isset($params['pageSize']) ? $params['pageSize'] : 10,
        ];
        // 根据dateType处理时间
        $MIndexV2 = new MIndexV2();
        // 根据dateType处理时间
        $selectParams = $MIndexV2::getUnixTimeByDataType($selectParams);

        if ($selectParams['dateType'] == 11 && !isset($params['startTime']) && !isset($params['endTime'])) {
            return $this->renderError('未选择时间');
        }

        // 分页
        $pageParams             = $MIndexV2->pageToOffset($selectParams['page'], $selectParams['pageSize']);
        $selectParams['limit']  = $pageParams['limit'];
        $selectParams['offset'] = $pageParams['offset'];

        $returnData = $MIndexV2->rank($selectParams);
        if ($returnData) {
            $result              = [
                'pageIndex' => $selectParams['page'],
                'pageSize'  => $selectParams['pageSize'],
                'pageTotal' => $returnData['total'],
            ];
            $result['state']     = true;
            $result['data']      = $returnData['data'];
            $result['errorcode'] = 0;
            return json($result);
        } else {
            $result['state']   = false;
            $result['message'] = $MIndexV2->getError();
            $result['data']    = [];
            return json($result);
        }
    }
}